05.Bash String
Table of Contents
Section titled “Table of Contents”Bash 所有代码除关键字外大部分变量默认为字符串
$ command="date" $ $command # 取 command 变量值 "date", "date" 作为命令执行 > Mon Jun 12 10:07:40 CST 2023 # 执行 date, 打印日期 $ echo date # date 被当作字符串, 作为 echo 的参数 > date $ echo $("date") # 执行 "date", 返回值作为 echo 的参数 > Mon Jun 12 10:23:46 CST 2023
${!var}
获取变量 var 的值, 并作为变量名引用
$ name="petter" # 定义变量 name, 值为 petter $ key="name" # 定义变量 key, 值为 name $ echo ${!key} # 使用 key 的值作为变量名, 并对该变量取值 > petter # 打印变量 petter $ cmd="date" $ var="cmd" $ ${!var} # 获取变量 var 对应的变量名, 并对该变量取值 > 2023年12月24日 星期日 12时50分38秒 CST # 变量值 date 作为命令执行, 打印日期
Bash 默认第一个字符为指令, 后续值为字符串作为指令的参数
使用 $(command)
方式, 将字符串作为命令执行
${#s}
返回字符串的长度
$ s="123 456"; s="456 123" # 赋值 $ echo "s:${s} length: ${#s}" # 获取长度 > s:456 123 length: 7 # 打印
${variable^^}
字母全替换为大写
${variable,,}
字母全替换为小写
$ var="ABC123xyz" $ echo ${var^^} > ABC123XYZ $ echo ${var,,} > abc123xyz
$ echo "num: 22 index: 4" | grep -oE "[0-9]+" # 筛选 > 22 4 $ echo $(ifconfig) | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" > 127.0.0.1 > 192.168.1.100
字符串通过 #
(开头开始匹配) %
(结尾开始匹配) 完成删除操作
最短匹配: ${variable#pattern}
${variable%pattern}
贪婪匹配:${variable##pattern}
${variable%%pattern}
字符串通过 /
(替换一次) //
(全替换) 完成替换操作
替换: ${variable/pattern/string}
${variable//pattern/string}
$ date="2023-07-31" $ echo ${date#*-} ${date##*-} # # 从开头开始匹配, 只匹配最短内容 ## 贪婪匹配 > 07-31 31 $ echo ${date%-*} ${date%%-*} # % 从结尾开始匹配, 只匹配最短内容 %% 贪婪匹配 > 2023-07 2023 $ echo ${date/-/=} # 只替换一次 > 2024=07-31 $ echo ${date//-/=} # 全替换 > 2023=07=01 $ echo “num 1123 num” | sed 's/[0-9]//g' # 删除全部数字 > num num $ echo “abcdef” | sed 's/[a-z]/0/g' # 字母全部替换为数字 > 000000
${s:start:length}
$ s="01234" $ echo "${s:0:3}" # 从序号 0 开始, 获取 3 个长度 > 012
expr index $string regex
, 序号从 1 开始
$ expr index "abcdef" "c" > 2